package com.yitiao.data_algorithms.leetcode.editor.cn;

import com.yitiao.data_algorithms.leetcode.editor.cn.base.ListNode;

/**
给你单链表的头节点 head ，请你反转链表，并返回反转后的链表。
 
 
 

 示例 1： 

 
输入：head = [1,2,3,4,5]
输出：[5,4,3,2,1]
 

 示例 2： 

 
输入：head = [1,2]
输出：[2,1]
 

 示例 3： 

 
输入：head = []
输出：[]
 

 

 提示： 

 
 链表中节点的数目范围是 [0, 5000] 
 -5000 <= Node.val <= 5000 
 

 

 进阶：链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题？ 
 
 
 Related Topics 递归 链表 👍 2276 👎 0

*/
// 反转链表
// 2022-02-17 09:00:45
class ReverseLinkedList{
    //leetcode submit region begin(Prohibit modification and deletion)
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {

    public ListNode reverseList(ListNode head) {
        ListNode cur = head;
        ListNode ans = null;
        while (cur!=null){
            ListNode next = cur.next;
            cur.next = ans;
            ans = cur;
            cur = next;
        }
        return ans;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}





















//// 迭代
//    // 当前只指针的next指向前一个指针 同时记录当前节点的前一个和后一个。
//
//    ListNode prev=null;
//    ListNode cur=head;
//// 遍历
//        while (cur!=null){
//                // 记录下一个节点作为下一次循环
//                ListNode next=cur.next;
//                // 核心
//                cur.next=prev;
//                // 交换后当前节点变为下一次循环的饿前一个节点
//                prev=cur;
//                // 下一次循环
//                cur=next;
//                }
//                // 返回 cur=null
//                return prev;